//
//  SqList.h
//  DataStruct
//
//  Created by vase on 2022/2/23.
//

#ifndef SqList_h
#define SqList_h

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//错误的定义
#define Sqlist_Error -1
//数据类型定义
#define ElementType int
//顺序表数组的长度
#define MaxSize 1000

/** 顺序表结构体*/
typedef struct SqList {
    ElementType *list; //数组本组
    int offset; //实际使用的长度
    int length; //物理分配的实际长度
} Sqlist;

/** 初始化顺序表*/
Sqlist initSqlist(int length);

/** 增加元素到数组最后*/
int add(Sqlist *list, int value);

/** 插入元素到指定位置*/
int insert(Sqlist *list, int index, int value);

/** 移除元素*/
int removeByIndex(Sqlist *list, int index);
//搜索顺序表最小值，并用最后一个元素替换之，返回最小值
int removeMin(Sqlist *list);
/** 删除数组中值为x的所有元素*/
int removeRepeate(Sqlist *list, int value);
/** 删除数组中值在指定范围内所有元素*/
int removeRange(Sqlist *list, int s, int t);
/** 从有序顺序表中，删除值重复的所有元素，保证表内值唯一*/
int removeToOnly(Sqlist *list);

/** 获取指定位置的元素*/

/** 顺序打印*/
void showSequence(Sqlist *list);

/** 数组逆置*/
void reserve(Sqlist *list);
/** 数组指定范围内逆置*/
void reserveRange(Sqlist *list, int head, int tail);

/** 数组排序*/
void sort(Sqlist *list);

/** 合并两个有序顺序表*/
Sqlist merge(Sqlist *list1, Sqlist* list2);

/** 将混合的两个顺序表调换位置*/
void adjustLocation(Sqlist *list, int m ,int n);

/** 二分查找*/
void fastSearch(Sqlist *list, int value);

/** 循环左移*/
void leftShift(Sqlist *list, int p);

/** 寻找中位数*/
int middle(Sqlist *list1, Sqlist *list2);

/** 寻找主元素*/
int domain(Sqlist *list);

/** 最小正整数*/
int minNum(Sqlist *list);

#endif /* SqList_h */
